home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / src / Complib / examples / PSLDLT_ex.f.z / PSLDLT_ex.f
Text File  |  1996-03-14  |  4KB  |  129 lines

  1. c
  2. c PSLDLT_ex.f
  3. c
  4. c     This simple example illustrates the use of the FORTRAN
  5. c     interface to PSLDLT (Parallel Sparse LDLT).
  6. c
  7. c     This program reads a sparse matrix from a Harwell-Boeing
  8. c     format input file, performs reordering and symbolic
  9. c     factorization, and then factors the matrix.
  10. c
  11. c
  12. c Copyright 1995, Silicon Graphics, Inc.
  13. c ALL RIGHTS RESERVED
  14. c
  15. c UNPUBLISHED -- Rights reserved under the copyright laws of the United
  16. c States.   Use of a copyright notice is precautionary only and does not
  17. c imply publication or disclosure.
  18. c
  19. c U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND:
  20. c Use, duplication or disclosure by the Government is subject to restrictions
  21. c as set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights
  22. c in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or
  23. c in similar or successor clauses in the FAR, or the DOD or NASA FAR
  24. c Supplement.  Contractor/manufacturer is Silicon Graphics, Inc.,
  25. c 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311.
  26. c
  27. c THE CONTENT OF THIS WORK CONTAINS CONFIDENTIAL AND PROPRIETARY
  28. c INFORMATION OF SILICON GRAPHICS, INC. ANY DUPLICATION, MODIFICATION,
  29. c DISTRIBUTION, OR DISCLOSURE IN ANY FORM, IN WHOLE, OR IN PART, IS STRICTLY
  30. c PROHIBITED WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SILICON
  31. c GRAPHICS, INC.
  32. c
  33. c
  34.       program PSLDLT_ex
  35.  
  36.       integer nn, nnz
  37.       parameter ( nn = 100000 )
  38.       parameter ( nnz = 1000000 )
  39. c
  40. c
  41. c     These three arrays hold the sparse input matrix A.
  42. c     Note that A is a symmetric, stored by columns with only the
  43. c     lower triangle present.
  44. c
  45. c
  46.       integer col(nn+1)
  47.       integer row(nnz)
  48.       real*8 a(nnz)
  49.  
  50.       real*8 x(nn), b(nn)
  51.  
  52.       character*80 fname, title, cTmp, format1, format2
  53.       real*8  tol, initNorm, finalNorm, ratio, xEigen
  54.       integer i, n, nz, nts, ns, nIters
  55.  
  56.       integer factor_nz
  57.       real*8 factor_ops
  58. c
  59.       real*8  dot1, dot2
  60. c
  61. c.... read the data from the input file ( NOT included in example )
  62. c
  63.       write( *, '("Input file name: ",$)' )
  64.       read( *,'(a80)' ) fname
  65.       open( unit = 10, file = fname, status = 'old', err = 998 )
  66. c
  67.       read( 10, '(a80)',             err=999, end=997 ) title
  68.       read( 10, '(a80)',             err=999, end=997 )
  69.       read( 10, '(a28,i14,i14)',     err=999, end=997 ) cTmp, n, nz
  70.       if ( n .gt. nn .or. nz .gt. nnz ) then
  71.          write( *,* ) " ***Error in dimensions: ", n, nn, nz, nnz
  72.          stop
  73.       endif
  74.       read( 10, '(a16,a16)',  err=999, end=997) format1, format2
  75. c
  76.       read( 10, format1, err=999, end=997 ) ( col(i), i = 1, n+1)
  77.       read( 10, format2, err=999, end=997 ) ( row(i), i = 1, nz)
  78.  
  79.  
  80. c
  81. c
  82. c     Perform pre-processing (ordering and symbolic factorization)
  83. c     on the input matrix.
  84. c
  85.       call PSLDLT_Preprocess(0, n, col, row, factor_nz, factor_ops)
  86.  
  87.       print *, 'factor nz = ', factor_nz, ' factor_ops = ', factor_ops
  88.  
  89. c
  90. c     fill a() and b() with arbitrary values
  91. c
  92.  
  93.       do i=1,nz
  94.          a(i) = i
  95.       enddo
  96.  
  97.       do i=1,n
  98.          b(i) = i/n
  99.       enddo
  100.  
  101.  
  102. c
  103. c     Factor the input matrix
  104. c
  105.       call PSLDLT_Factor(0, n, col, row, a)
  106.  
  107.  
  108. c
  109. c
  110. c     Solve Ax=b for x by performing forward and backward solves, using
  111. c     the factor computed by the earlier PSLDLT_Factor() call.
  112. c
  113.       call PSLDLT_Solve(0, x, b)
  114.  
  115.  
  116.       stop
  117.  
  118.  997  write( *,* ) " *** Error eof ", fname
  119.       stop
  120. c
  121.  998  write( *,* ) " *** Error opening ", fname
  122.       stop
  123. c     
  124.  999  write( *,* ) " *** Error reading ", fname
  125.       stop
  126.  
  127.       end
  128.  
  129.